﻿@inherits BaseComponent

<Button Class="@Class" Icon="@Icon" Type="@BtnType" Style="Style"
        Block="Block" Danger="Danger" Disabled="!Enabled" Loading="isLoad"
        OnClick="OnButtonClickAsync">
    @Name
</Button>

@code {
    private bool isLoad;
    private bool Danger => Type == "danger";
    private string BtnType => Danger ? ButtonType.Primary : Type;

    /// <summary>
    /// 取得或设置是否是块级按钮。
    /// </summary>
    [Parameter] public bool Block { get; set; }

    /// <summary>
    /// 取得或设置按钮图标。
    /// </summary>
    [Parameter] public string Icon { get; set; }

    /// <summary>
    /// 取得或设置按钮类型（如：ButtonType.Primary）。
    /// </summary>
    [Parameter] public string Type { get; set; }

    /// <summary>
    /// 取得或设置按钮CSS类名。
    /// </summary>
    [Parameter] public string Class { get; set; }

    /// <summary>
    /// 取得或设置按钮样式。
    /// </summary>
    [Parameter] public string Style { get; set; }

    /// <summary>
    /// 取得或设置按钮单击事件。
    /// </summary>
    [Parameter] public EventCallback<MouseEventArgs> OnClick { get; set; }

    private async Task OnButtonClickAsync(MouseEventArgs args)
    {
        if (isLoad || !OnClick.HasDelegate)
            return;

        isLoad = true;
        await OnClick.InvokeAsync(args);
        isLoad = false;
    }
}